Cleanup event references on AgentLogs when Events are deleted

Andrew Cantino vor 9 Jahren
Ursprung
Commit
32a2a77143
4 geänderte Dateien mit 19 neuen Zeilen und 1 gelöschten Zeilen
  1. 1 1
      app/models/agents/java_script_agent.rb
  2. 4 0
      app/models/event.rb
  3. 2 0
      spec/fixtures/agent_logs.yml
  4. 12 0
      spec/models/event_spec.rb

+ 1 - 1
app/models/agents/java_script_agent.rb

@@ -13,7 +13,7 @@ module Agents
13 13
       You can implement `Agent.check` and `Agent.receive` as you see fit.  The following methods will be available on Agent in the JavaScript environment:
14 14
 
15 15
       * `this.createEvent(payload)`
16
-      * `this.incomingEvents()`
16
+      * `this.incomingEvents()` (the returned event objects will each have a `payload` property)
17 17
       * `this.memory()`
18 18
       * `this.memory(key)`
19 19
       * `this.memory(keyToSet, valueToSet)`

+ 4 - 0
app/models/event.rb

@@ -16,6 +16,9 @@ class Event < ActiveRecord::Base
16 16
   belongs_to :user
17 17
   belongs_to :agent, :counter_cache => true, :touch => :last_event_at
18 18
 
19
+  has_many :agent_logs_as_inbound_event, :class_name => "AgentLog", :foreign_key => :inbound_event_id, :dependent => :nullify
20
+  has_many :agent_logs_as_outbound_event, :class_name => "AgentLog", :foreign_key => :outbound_event_id, :dependent => :nullify
21
+
19 22
   scope :recent, lambda { |timespan = 12.hours.ago|
20 23
     where("events.created_at > ?", timespan)
21 24
   }
@@ -36,6 +39,7 @@ class Event < ActiveRecord::Base
36 39
   end
37 40
 
38 41
   protected
42
+
39 43
   def possibly_propagate
40 44
     #immediately schedule agents that want immediate updates
41 45
     propagate_ids = agent.receivers.where(:propagate_immediately => true).pluck(:id)

+ 2 - 0
spec/fixtures/agent_logs.yml

@@ -1,9 +1,11 @@
1 1
 log_for_jane_website_agent:
2 2
   agent: jane_website_agent
3
+  outbound_event: jane_website_agent_event
3 4
   message: "fetching some website data"
4 5
 
5 6
 log_for_bob_website_agent:
6 7
   agent: bob_website_agent
8
+  outbound_event: bob_website_agent_event
7 9
   message: "fetching some other website data"
8 10
 
9 11
 first_log_for_bob_weather_agent:

+ 12 - 0
spec/models/event_spec.rb

@@ -75,6 +75,18 @@ describe Event do
75 75
       Event.find_by_id(event.id).should_not be_nil
76 76
     end
77 77
   end
78
+
79
+  describe "after destroy" do
80
+    it "nullifies any dependent AgentLogs" do
81
+      agent_logs(:log_for_jane_website_agent).outbound_event_id.should be_present
82
+      agent_logs(:log_for_bob_website_agent).outbound_event_id.should be_present
83
+
84
+      agent_logs(:log_for_bob_website_agent).outbound_event.destroy
85
+
86
+      agent_logs(:log_for_jane_website_agent).reload.outbound_event_id.should be_present
87
+      agent_logs(:log_for_bob_website_agent).reload.outbound_event_id.should be_nil
88
+    end
89
+  end
78 90
 end
79 91
 
80 92
 describe EventDrop do